"""
4. 切片的使用

题目：编写一个Python程序，随机生成20个由大小写字母、数字和下划线组成的字符组，并使用字符串、列表、集合和元组的方法打印出来。
对字符串和列表切片，用两种方式取出4-14位的字符。
提示：
    1. 使用random.randint()函数生成随机整数。
    2. 使用random.choice()函数从字符组中随机选择一个字符。
    3. 字符串切片：str[start:end]，列表切片：list[start:end]。
"""

import random

# 随机生成20个字符（请补充完整代码）


import random
import string

# 生成包含大小写字母、数字和下划线的字符组
characters = string.ascii_letters + string.digits + '_'

# 随机生成20个字符组
random_strings = [''.join(random.choice(characters) for _ in range(random.randint(10, 20))) for _ in range(20)]
random_lists = [list(''.join(random.choice(characters) for _ in range(random.randint(10, 20)))) for _ in range(20)]
random_sets = [set(''.join(random.choice(characters) for _ in range(random.randint(10, 20)))) for _ in range(20)]
random_tuples = [tuple(''.join(random.choice(characters) for _ in range(random.randint(10, 20)))) for _ in range(20)]

# 打印随机生成的字符组
print("随机生成的字符串：")
for string_item in random_strings:
    print(string_item)

print("\n随机生成的列表：")
for list_item in random_lists:
    print(list_item)

print("\n随机生成的集合：")
for set_item in random_sets:
    print(set_item)

print("\n随机生成的元组：")
for tuple_item in random_tuples:
    print(tuple_item)

# 对字符串和列表进行切片，取出4-14位的字符
print("\n字符串切片：")
for string_item in random_strings:
    # 第一种方式：使用常规的切片语法
    print(string_item[4:15])
    # 第二种方式：使用切片对象
    slice_obj = slice(4, 15)
    print(string_item[slice_obj])

print("\n列表切片：")
for list_item in random_lists:
    # 第一种方式：使用常规的切片语法
    print(list_item[4:15])
    # 第二种方式：使用切片对象
    slice_obj = slice(4, 15)
    print(list_item[slice_obj])